Next: Equality Predicates, Up: Predicates [Contents][Index]
Check if object is of type type,
where type is a (quoted) type name of the sort
used by Common Lisp. For example, (cl-typep foo
'integer) is equivalent to (integerp
foo).
The type argument to the above function is either a symbol or a list beginning with a symbol.
t stands for the union of all
types. (cl-typep object t) is always
true. Likewise, the type symbol nil stands for
nothing at all, and (cl-typep object
nil) is always false.null represents the symbol
nil. Thus (cl-typep object
'null) is equivalent to (null
object).atom represents all objects
that are not cons cells. Thus (cl-typep object
'atom) is equivalent to (atom
object).real is a synonym for
number, and fixnum is a synonym for
integer.character and
string-char match integers in the range from 0 to
255.(integer low
high) represents all integers between
low and high, inclusive. Either bound may
be a list of a single integer to specify an exclusive limit, or
a * to specify no limit. The type (integer *
*) is thus equivalent to integer.float,
real, or number represent numbers of
that type falling in a particular range.and, or, and
not form combinations of types. For example,
(or integer (float 0 *)) represents all objects
that are integers or non-negative floats.member or
cl-member represent objects eql to
any of the following values. For example, (member 1 2 3
4) is equivalent to (integer 1 4), and
(member nil) is equivalent to
null.(satisfies
predicate) represent all objects for which
predicate returns true when called with that object
as an argument.The following function and macro (not technically predicates)
are related to cl-typep.
This function attempts to convert object to the
specified type. If object is already of
that type as determined by cl-typep, it is
simply returned. Otherwise, certain types of conversions will
be made: If type is any sequence type
(string, list, etc.) then
object will be converted to that type if possible.
If type is character, then strings of
length one and symbols with one-character names can be
coerced. If type is float, then
integers can be coerced in versions of Emacs that support
floats. In all other circumstances, cl-coerce
signals an error.
This macro defines a new type called name. It
is similar to defmacro in many ways; when
name is encountered as a type name, the body
forms are evaluated and should return a type
specifier that is equivalent to the type. The
arglist is a Common Lisp argument list of the sort
accepted by cl-defmacro. The type specifier
‘(name
args…)’ is expanded by calling
the expander with those arguments; the type symbol
‘name’ is expanded by
calling the expander with no arguments. The
arglist is processed the same as for
cl-defmacro except that optional arguments
without explicit defaults use * instead of
nil as the “default” default. Some
examples:
(cl-deftype null () '(satisfies null)) ; predefined (cl-deftype list () '(or null cons)) ; predefined (cl-deftype unsigned-byte (&optional bits) (list 'integer 0 (if (eq bits '*) bits (1- (lsh 1 bits))))) (unsigned-byte 8) ≡ (integer 0 255) (unsigned-byte) ≡ (integer 0 *) unsigned-byte ≡ (integer 0 *)
The last example shows how the Common Lisp
unsigned-byte type specifier could be
implemented if desired; this package does not implement
unsigned-byte by default.
The cl-typecase (see Conditionals) and
cl-check-type (see Assertions) macros also use type
names. The cl-map, cl-concatenate, and
cl-merge functions take type-name arguments to
specify the type of sequence to return. See Sequences.
Next: Equality Predicates, Up: Predicates [Contents][Index]